﻿using System;
// 4.5.6 TryXXX方法的模板
// 当方法出错时，可以选择返回某种类型的错误代码或抛出异常。
// 一般情况下，如果错误发生在正常的工作流之外或者希望方法的直接调用者不进行错误处理时，抛出异常。但有些情况下最好给调用者提供两种选择。

//以int类型为例，它为Parse方法定义了两个版本：
//public int Parse(string input);
//public bool TryParse(string input, out int returnValue);
// 如果类型解析失败，Parse方法抛出异常，TryParse方法返回false。

//可以用XXX方法调用TryXXX方法来实现该模板：
/*
public return-type xxx(input-type input)
{
    return-type returnValue;
    if (!TryXXX(input, out returnValue))
        throw new YYYException();
    return returnValue;
}
*/
namespace _107_try语句和异常_TryXXX方法的模板
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}
// 4.5.7 异常的替换方法
//在int.TryParse中，函数可以通过返回值或参数向调用函数返回错误代码。尽管对于简单的可预见的错误，这是个可行的方法，但对于所有的错误类型，它就显得捉襟见肘了，不仅会使方法的签名晦涩，而且增加了不必要的复杂性，使代码混乱。
//它也不能推广到如运算符（例如：除法运算符）、属性等不是方法的函数上。此时可替换的方法是，把错误放在一个公共的地方，使其对调用堆栈中所有的函数都可见就（例如：每个线程中存储当前错误的静态方法）。但是，这要求每个函数都参与错误传播模式，这本身就是冗长且容易出错的。